package main

import (
	"fmt"
	"time"
)

func main() {

	timer1 := time.NewTimer(2 * time.Second)

	//<-timer1.C：在主 Goroutine 中等待从 timer1 的通道 C 中接收到值。这个操作会阻塞当前 Goroutine，直到定时器的时间到达。
	<-timer1.C //一个channel
	fmt.Println("Timer 1 fired")

	//go func() { ... }()：启动一个新的 Goroutine，
	//用于等待从 timer2 的通道 C 中接收值。这个 Goroutine 在定时器到达时间后，输出 "Timer 2 fired"。
	timer2 := time.NewTimer(time.Second)
	go func() {
		<-timer2.C
		fmt.Println("Timer 2 fired")
	}()

	//timer.Stop() ture表示停止成功，false表示停止失败因为定时器已经停止了，无法再次停止
	//主Goroutine 会先执行，所以没等一秒就会先把timer2停止了
	stop2 := timer2.Stop()
	if stop2 {
		fmt.Println("Timer 2 stopped")
	}

	time.Sleep(2 * time.Second)
}
